#!/usr/bin/env python3
"""
视频分析脚本
用于分析视频文件并生成文案
"""

import os
import struct
from pathlib import Path

def analyze_mp4_metadata(file_path):
    """分析MP4文件的基本元数据"""
    file_size = os.path.getsize(file_path)
    file_stat = os.stat(file_path)
    
    metadata = {
        'file_size': file_size,
        'file_size_mb': round(file_size / (1024 * 1024), 2),
        'creation_time': file_stat.st_ctime,
        'modification_time': file_stat.st_mtime,
        'file_name': Path(file_path).name,
    }
    
    # 尝试读取MP4文件的基本信息
    try:
        with open(file_path, 'rb') as f:
            # 读取文件头部信息
            header = f.read(32)
            
            # MP4文件通常以 'ftyp' box 开始
            if b'ftyp' in header:
                metadata['format'] = 'MP4'
                
            # 尝试找到 'moov' box 来获取更多信息
            f.seek(0)
            data = f.read(min(1024*1024, file_size))  # 读取最多1MB来分析
            
            if b'moov' in data:
                metadata['has_movie_data'] = True
            
            # 查找时长信息（简化版本）
            if b'mvhd' in data:
                mvhd_pos = data.find(b'mvhd')
                if mvhd_pos != -1:
                    try:
                        # 读取时间刻度和持续时间
                        f.seek(mvhd_pos + 12)
                        timescale = struct.unpack('>I', f.read(4))[0]
                        duration = struct.unpack('>I', f.read(4))[0]
                        if timescale > 0:
                            metadata['duration_seconds'] = duration / timescale
                    except:
                        pass
                        
    except Exception as e:
        metadata['error'] = str(e)
    
    return metadata

def generate_trendy_captions(metadata):
    """基于视频元数据生成有网感的文案"""
    file_name = metadata.get('file_name', '')
    duration = metadata.get('duration_seconds', 0)
    file_size_mb = metadata.get('file_size_mb', 0)
    
    captions = []
    
    # 基于文件名分析
    if '2024530431' in file_name:
        # 看起来像是时间戳或ID
        captions.extend([
            "🔥 这个视频绝了！编号2024530431，你们懂的~ #热门",
            "💯 又是一个神仙视频！2024530431这个编号我记住了 #必看",
            "✨ 宝藏视频来了！编号2024530431，速度上车！#推荐算法"
        ])
    
    # 基于文件大小
    if file_size_mb < 2:
        captions.extend([
            "📱 精华浓缩！小体积大能量，这就是短视频的魅力 #短视频",
            "⚡ 1.8MB装下整个世界，这波操作我服了 #压缩艺术",
            "🎯 麻雀虽小五脏俱全，短小精悍就是王道！#精品内容"
        ])
    
    # 基于可能的时长
    if duration > 0:
        if duration < 30:
            captions.extend([
                f"⏰ {duration:.1f}秒精华！每一帧都是精品 #短视频之王",
                f"💨 {duration:.1f}秒看完，但回味无穷～ #经典永流传",
                f"🚀 {duration:.1f}秒直击灵魂，这就是短视频的力量 #病毒式传播"
            ])
        elif duration < 60:
            captions.extend([
                f"📺 {duration:.1f}秒的神仙内容，已经单曲循环了 #上瘾警告",
                f"🎬 不到一分钟，但足以改变你的一天 #人生感悟",
                f"💎 {duration:.1f}秒的宝藏视频，不看后悔系列 #必收藏"
            ])
    
    # 通用网感文案
    universal_captions = [
        "🔥 这个视频有毒！看了根本停不下来 #中毒警告",
        "💯 姐妹们冲冲冲！这个必须安排上 #姐妹必看",
        "✨ 神仙视频预警！颜值党狂欢现场 #神仙颜值",
        "🎯 算法推给我的宝藏，赶紧冲！#算法真香",
        "⚡ 这就是传说中的神级内容？爱了爱了 #神级操作",
        "🌟 破防了破防了，这个视频绝了！#破防现场",
        "💎 宝藏博主石锤，这个视频太绝了 #宝藏博主",
        "🚀 病毒式传播预定，这个要火！#即将爆火",
        "📱 深夜刷到宝藏，睡不着了怎么办 #深夜福利",
        "🎪 这个视频有魔性，已经看了十遍了 #魔性循环"
    ]
    
    captions.extend(universal_captions)
    
    return captions

def main():
    video_path = '/home/hxz/cc/miniCompose/tool/movie/2024530431.mp4'
    
    if not os.path.exists(video_path):
        print("❌ 视频文件不存在")
        return
    
    print("🎬 开始分析视频文件...")
    metadata = analyze_mp4_metadata(video_path)
    
    print("\n📊 视频基本信息:")
    print(f"文件名: {metadata.get('file_name')}")
    print(f"文件大小: {metadata.get('file_size_mb')} MB")
    print(f"格式: {metadata.get('format', '未知')}")
    
    if 'duration_seconds' in metadata:
        print(f"时长: {metadata['duration_seconds']:.1f} 秒")
    
    print(f"包含视频数据: {'是' if metadata.get('has_movie_data') else '否'}")
    
    print("\n🔥 生成的网感文案:")
    captions = generate_trendy_captions(metadata)
    
    # 分类显示文案
    print("\n🎯 基于文件信息的个性化文案:")
    personal_captions = captions[:6]
    for i, caption in enumerate(personal_captions, 1):
        print(f"{i:2d}. {caption}")
    
    print("\n🌟 通用爆款文案:")
    universal_start = len([c for c in captions if '2024530431' in c or 'MB' in c or '秒' in c])
    universal_captions = captions[universal_start:universal_start+6]
    for i, caption in enumerate(universal_captions, 1):
        print(f"{i:2d}. {caption}")
    
    print("\n💡 额外推荐文案:")
    extra_captions = [
        "🎭 这个视频演技爆表，奥斯卡预定！ #演技派",
        "🎨 构图绝了！每一帧都是壁纸级别 #视觉盛宴",  
        "🎵 BGM一响，我就知道要上头了 #神仙BGM",
        "📸 这个拍摄角度，导演都要学习了 #拍摄技巧",
        "🎬 剧情反转！这个编剧太会了 #剧情神转折",
        "💫 这个创意绝了，脑洞大到没朋友 #创意满分"
    ]
    for i, caption in enumerate(extra_captions, 1):
        print(f"{i:2d}. {caption}")
    
    print(f"\n✨ 总共生成了 {len(captions)} 个文案选项")
    print("💡 可以根据具体内容选择最合适的文案")

if __name__ == "__main__":
    main()